# -*- coding: utf-8 -*-
"""
A股股票日线数据批量同步脚本（按日期批量获取）

这个脚本使用更高效的批量同步方式：
- 按日期批量获取所有股票的数据，而不是逐个股票获取
- 大大减少API调用次数（30天只需30次调用，而不是5000+股票的调用）
- 适合用于日常增量更新

使用场景：
1. 日常增量同步（每天更新最新数据）
2. 补充最近一段时间的数据
3. 初始化时快速导入最近30天的数据

注意：
- 仅支持 Tushare 数据源
- 需要在 config.py 中配置 data_source='tushare' 和 tushare_token
"""
import logging
import argparse
from datetime import datetime
from sync_stock_daily import StockDailySync

# 配置日志
logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s [%(levelname)s] %(name)s: %(message)s'
)
logger = logging.getLogger(__name__)

def main():
    """主函数"""
    # 解析命令行参数
    parser = argparse.ArgumentParser(description='按日期批量同步所有股票的日线数据')
    parser.add_argument('--days', type=int, default=30, help='要同步的天数（默认30天）')
    args = parser.parse_args()
    
    try:
        print("\n" + "=" * 60)
        print("A股股票日线数据批量同步（按日期）")
        print("=" * 60)
        print(f"开始时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
        print(f"同步天数: {args.days}")
        print("=" * 60 + "\n")
        
        # 创建同步器
        sync = StockDailySync()
        
        # 检查数据源
        if sync.data_source != 'tushare':
            print(f"错误：批量同步仅支持 Tushare 数据源")
            print(f"当前数据源为: {sync.data_source}")
            print(f"请在 config.py 中设置 data_source='tushare'")
            return
        
        # 执行批量同步
        result = sync.sync_daily_data_by_date_batch(days=args.days)
        
        # 打印结果
        print("\n" + "=" * 60)
        if result['success']:
            print("✓ 批量同步成功！")
            print("=" * 60)
            print(f"总交易日: {result['total_days']} 天")
            print(f"成功同步: {result['synced_days']} 天")
            print(f"跳过天数: {result['skipped_days']} 天")
            print(f"总记录数: {result['total_records']} 条")
            if result['synced_days'] > 0:
                print(f"平均每天: {result['total_records'] // result['synced_days']} 条")
            print(f"同步耗时: {result['duration']:.2f} 秒")
        else:
            print("✗ 批量同步失败！")
            print("=" * 60)
            print(f"错误信息: {result['error']}")
        print("=" * 60)
        
        # 显示数据库当前状态
        summary = sync.get_sync_summary()
        if 'error' not in summary:
            print("\n数据库当前状态:")
            print(f"总记录数: {summary['total_records']:,}")
            print(f"股票数: {summary['total_stocks']}")
            print(f"最新日期: {summary['latest_date']}")
            print(f"最早日期: {summary['earliest_date']}")
        
        print("\n完成时间: " + datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
        
    except Exception as e:
        logger.error(f"程序执行失败: {e}")
        print(f"\n✗ 程序执行失败: {e}")
        import traceback
        traceback.print_exc()

if __name__ == "__main__":
    main()
